Customers who purchase software products sometimes customize the software products to suit their needs. For example, a customer may customize the appearance of the user interface of the software product to their liking. After customizing the software product, it is not uncommon for the company that developed the software product to release a new version of the product. In this situation, the customizations that were made by the customer to the software product need to be reimplemented. That is, the customizations are typically not reusable in conventional software products. Thus, the customer must recustomize the software product, which is time-consuming and can introduce bugs into the software product. As such, it is desirable to design software products so that customizations are reusable when a new version of the software product is released.